/*
 * Copyright (C) 2012-2013  Romain DUBOIS
 * 
 * This file is part of NeMoS - Network and Modular Software
 * 
 * NeMoS is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * NeMoS is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with NeMoS.  If not, see <http://www.gnu.org/licenses/>.
 */
package nemos.swing;

import java.util.Map;

import javax.swing.border.Border;

/**
 * IBorderFactory : The border factory interface.
 * 
 * <p>
 * Services registered under this interface provide Swing {@link Border}s. The
 * managed border type must be registered in the {@link #BORDER_TYPE} service
 * property.
 * </p>
 * 
 * <p>
 * This interface main purpose is to ease the generation of Swing interfaces
 * from external resources, mainly textual files (plain, XML, ...). This is why
 * a {@link IBorderFactory} should handle parameters in a single {@link String}
 * form.
 * </p>
 * 
 * @author Romain DUBOIS
 */
public interface IBorderFactory {

    /** The supported types property name (String property) */
    String BORDER_TYPE = "nemos.swing.border.type"; //$NON-NLS-1$

    /**
     * Create a border in its default form.
     * 
     * @return A border
     */
    Border createBorder();

    /**
     * Create a border using the specified parameters.
     * 
     * @param pParams
     *            The parameters in a single String
     * @return A border
     */
    Border createBorder(String pParams);

    /**
     * Create a border using the specified parameters.
     * 
     * @param pParams
     *            The parameters map
     * @return A border
     */
    Border createBorder(Map<String, ?> pParams);
}
